/*******************************************************************************
** 文件名称：uart0.c
** 文件作用：串口操作
** 编写作者：TomFree <付瑞彪>
** 编写时间：2019-12-20
** 文件备注：
**
** 更新记录：
**           2019-12-20 -> 创建文件                                 <Tom Free>
**
**           1 Tab == 4 Spaces     UTF-8     ANSI C Language
*******************************************************************************/

#include "uart0.h"
#include "chip.h"

/*******************************************************************************
** 函数名称：UART0_Init
** 函数作用：初始化UART0
** 输入参数：baud     - 波特率
**          int_mode - 中断模式
** 输出参数：无
** 使用范例：UART0_Init(9600, );
** 函数备注：
*******************************************************************************/
void UART0_Init(GM_U32 baud, UART0_INTERRUPT int_mode)
{
    GM_U16 ubrrdat = (GM_U16)((CHIP_FOSC >> 4) * 1.0 / baud - 0.5);
    UCSR0A = 0X00;
    UCSR0B = (0X18 & 0x1F) | (int_mode << 5);
    UCSR0C = 0X86;
    UBRR0H = ubrrdat >> 8;
    UBRR0L = ubrrdat;
}

/*******************************************************************************
** 函数名称：UART0_QueryTxComplete
** 函数作用：查询发送是否空闲
** 输入参数：无
** 输出参数：是否空闲
** 使用范例：GM_U8 res = UART0_QueryTxComplete();
** 函数备注：
*******************************************************************************/
GM_BOOL UART0_QueryTxIdle()
{
    return (UCSR0A & (1 << UDRE0)) ? GM_TRUE : GM_FALSE;
}

/*******************************************************************************
** 函数名称：UART0_QueryRxComplete
** 函数作用：查询接收是否完成
** 输入参数：无
** 输出参数：是否完成
** 使用范例：GM_U8 res = UART0_QueryRxComplete();
** 函数备注：
*******************************************************************************/
GM_BOOL UART0_QueryRxComplete()
{
    return (UCSR0A & (1 << RXC0)) ? GM_TRUE : GM_FALSE;
}

/*******************************************************************************
** 函数名称：UART0_SendByte
** 函数作用：无等待发送一个字节
** 输入参数：tx_data - 数据
** 输出参数：无
** 使用范例：UART0_SendByte();
** 函数备注：
*******************************************************************************/
void UART0_SendByte(GM_U8 tx_data)
{
    UDR0 = tx_data;
}

/*******************************************************************************
** 函数名称：UART0_ReadByte
** 函数作用：无等待读取一个字节
** 输入参数：无
** 输出参数：数据
** 使用范例：GM_U8 rx_data = UART0_ReadByte();
** 函数备注：
*******************************************************************************/
GM_U8 UART0_ReadByte()
{
    return UDR0;
}

